Sharing a content item

ABSTRACT

A content item on a content management system can be shared using a generated sharing link. The sharing link can be a custom network address, such as a uniform resource locator (URL), which allows the content item to be accessed without authentication. The sharing index and a content path of the content items can be listed in a sharing index used to identify the content upon a request initiated by the sharing link. The content management system can generate a content link to a content item upon receiving a sharing input from a user indicating the user wants to share a content item. Alternatively, in some embodiments, sharing links can be pre-generated by the content management system and stored on the client device. The sharing link can stored directly to a data buffer on the client device, such as a clipboard, where it can be accessed by the user.

CROSS REFERENCE TO RELATED APPLICATIONS

This application is a continuation of U.S. application Ser. No.14/203,442, filed on Mar. 10, 2014, entitled, “SHARING A CONTENT ITEM,”which claims priority to U.S. Provisional Application No. 61,775,367,filed on Mar. 8, 2013, entitled, “SHARING A CONTENT ITEM”; both of whichare expressly incorporated by reference herein in their entireties.

TECHNICAL FIELD

The present technology pertains to sharing content items, and morespecifically pertains to creating a sharing link to a content item.

BACKGROUND

Cloud storage accounts allow users to store their content items in anonline storage account that can be accessed from any computing devicewith a network connection. Users can thus upload content items such aspictures, songs, documents, etc. from a computing device to their onlinestorage account and later access the content items from differentcomputing devices.

In addition to enabling a user to access their content items frommultiple computing devices, cloud storage accounts can also enable auser to share their content items with other users. For example, userscan create links to their content items that can be used to access theshared content items. A user can provide the links to other uses toprovide access to the content item.

Current systems of sharing a content item can be difficult to use, whichcan deter users from sharing their content items. For example, somesystems require users to navigate a difficult user interface to create asharing link to a content item. Further, a network connection may berequired to create a sharing link. Some systems can require that theuser wait for a content item to be uploaded to the content managementsystem prior to providing a sharing link to a user. Accordingly, animproved method of sharing a content item is needed.

SUMMARY

Additional features and advantages of the disclosure will be set forthin the description which follows, and in part will be obvious from thedescription, or can be learned by practice of the herein disclosedprinciples. The features and advantages of the disclosure can berealized and obtained by means of the instruments and combinationsparticularly pointed out in the appended claims. These and otherfeatures of the disclosure will become more fully apparent from thefollowing description and appended claims, or can be learned by thepractice of the principles set forth herein.

Disclosed are systems, methods, and non-transitory computer-readablestorage media for sharing a content item. To enable a user to share acontent item with other users, a content management system can beconfigured to create a sharing link that is a custom network address,such as a uniform resource locator (URL), which allows the content itemto be accessed without authentication. The sharing link can beconfigured to request the content item from the content managementsystem.

The content management system can use the sharing link to identify thecontent item and return it to a requesting user device. For example, thecontent management system can include a sharing index that lists eachsharing link along with a content path identifying the location of thecontent item associated with the sharing link. The content managementsystem can thus use the sharing link received from a requesting clientdevice to search the sharing index and return the content item.

In some embodiments, the content management system can generate acontent link to a content item upon receiving a sharing input from auser indicating that the user wants to share a content item. A sharinginput can be received as a result of a user selecting a user interfaceelement, such as a button, provided with a content item and prompting auser to share the content item. In some embodiments, the user interfaceelement can be configured to appear when a user scrolls over a contentitem. In some embodiments, the user interface element can be presentedas a window that appears upon a user right-clicking on the content item.In some embodiments, the sharing input can be received as a result ofthe user using a keyboard shortcut.

Upon receiving the sharing input, a client device can send a sharingrequest to a content management system to generate a sharing link forthe content item. The content management system can generate the sharinglink and return it to the client device to be presented to the user.

Alternatively, in some embodiments, the content management system canpre-generate sharing links that are stored on the client device. Uponreceiving a sharing input from a user, the client device can provide oneof the locally stored sharing links rather than requesting that a newsharing link be generated by the content management system. The clientdevice can then send a sharing request to the content management systemthat identifies the sharing link provided to the user as well as acontent path identified with the shared content item. The contentmanagement system can use the data received in the sharing request toupdate the sharing index to associate the content path with the sharinglink.

A sharing link can be provided to a user in multiple ways. In someembodiments, the sharing link can be visually presented to the user. Forexample the sharing link can be presented as text on the client devicethat the user can copy to an e-mail, social networking post, etc., toshare the content item. Alternatively, in some embodiments, the sharinglink can be stored to a data buffer on the client device, such as aclipboard. The user can thus access the sharing link by using, forexample, a paste function to enter the sharing link into an e-mail,social networking post, etc.

BRIEF DESCRIPTION OF THE DRAWINGS

The above-recited and other advantages and features of the disclosurewill become apparent by reference to specific embodiments thereof whichare illustrated in the appended drawings. Understanding that thesedrawings depict only exemplary embodiments of the disclosure and are nottherefore to be considered to be limiting of its scope, the principlesherein are described and explained with additional specificity anddetail through the use of the accompanying drawings in which:

FIG. 1 shows an exemplary configuration of devices and a network inaccordance with the invention;

FIG. 2 shows a content management system creating a sharing link uponreceiving a sharing request from client device;

FIG. 3 shows an exemplary method embodiment of a client device providinga sharing link to a content item;

FIG. 4 shows an exemplary method embodiment of a content managementsystem creating a sharing link upon receiving a sharing request from aclient device;

FIGS. 5A-5C show an exemplary embodiment of providing a user with asharing link stored in a local memory on a client device;

FIG. 6 shows an exemplary method embodiment of a client device providinga user with a sharing link stored in a local memory;

FIG. 7 shows an exemplary method embodiment of a content managementsystem providing a user with a sharing link stored in a local memory onthe client device;

FIG. 8 shows an exemplary method embodiment of returning a content itemrequested by a sharing link; and

FIGS. 9A and 9B show exemplary possible system embodiments.

DESCRIPTION

Various embodiments of the disclosure are discussed in detail below.While specific implementations are discussed, it should be understoodthat this is done for illustration purposes only. A person skilled inthe relevant art will recognize that other components and configurationsmay be used without parting from the spirit and scope of the disclosure.

The disclosed technology addresses the need in the art for sharing acontent item stored on a content management system. To enable a user toshare the content item with other users, the content management systemcan be configured to create a sharing link that is a custom networkaddress, such as a uniform resource locator (URL), which allows thecontent item to be accessed without authentication. The sharing link canbe configured to request the content item from the content managementsystem.

The content management system can use the sharing link to identify thecontent item and return it to a requesting user device. For example, thecontent management system can include a sharing index that identifieseach created sharing link along with a content path identifying thelocation of the content item associated with the sharing link. Thecontent management system can thus use the sharing link received from arequesting client device to search the sharing index and return thecontent item.

In some embodiments, the content management system can generate asharing link to a content item in response to a user requesting to sharethe content item. For example, a sharing input received at a clientdevice can indicate that a user wants to share a content item. Uponreceiving the sharing input, a client device can send a sharing requestto a content management system to generate a sharing link for thecontent item. The content management system can generate the sharinglink and return it to the client device to be made available to theuser.

Alternatively, in some embodiments, sharing links can be pre-generatedby the content management system and stored on the client device priorto a user requesting to share a content item. Upon receiving a sharinginput from a user requesting to share a content item, the client devicecan provide one of the locally stored sharing links rather thanrequesting that a sharing link be generated by the content managementsystem. This can be advantageous because the sharing link can be madeavailable to the user without having to wait for the content managementsystem to create the sharing link. Further, the sharing link can be madeavailable to the user while the client device is offline, i.e. is not innetwork communication with the content management system.

In some embodiments, the sharing link can be made available to a user ina data buffer on the client device, such as a clipboard. The clientdevice can store the sharing link received from the content managementsystem in the data buffer. The user can then easily access the sharinglink through, for example, a paste function, to enter the sharing linkinto an e-mail, social networking post, etc.

An exemplary system configuration 100 is illustrated in FIG. 1, whereinelectronic devices communicate via a network for purposes of exchangingcontent and other data. The system can be configured for use on a widearea network such as that illustrated in FIG. 1. However, the presentprinciples are applicable to a wide variety of network configurationsthat facilitate the intercommunication of electronic devices. Forexample, each of the components of system 100 in FIG. 1 can beimplemented in a localized or distributed fashion in a network.

In system 100, a user can interact with content management system 106through client devices 102 ₁, 102 ₂, . . . , 102 _(n) (collectively“102”) connected to network 104 by direct and/or indirect communication.Content management system 106 can support connections from a variety ofdifferent client devices, such as desktop computers; mobile computers;mobile communications devices, e.g. mobile phones, smart phones,tablets; smart televisions; set-top boxes; and/or any other networkenabled computing devices. Client devices 102 can be of varying type,capabilities, operating systems, etc. Furthermore, content managementsystem 106 can concurrently accept connections from and interact withmultiple client devices 102.

A user can interact with content management system 106 via a client-sideapplication installed on client device 102 _(i). In some embodiments,the client-side application can include a content management systemspecific component. For example, the component can be a stand-aloneapplication, one or more application plug-ins, and/or a browserextension. However, the user can also interact with content managementsystem 106 via a third-party application, such as a web browser, thatresides on client device 102 _(i) and is configured to communicate withcontent management system 106. In either case, the client-sideapplication can present a user interface (UI) for the user to interactwith content management system 106. For example, the user can interactwith the content management system 106 via a client-side applicationintegrated with the file system or via a webpage displayed using a webbrowser application.

Content management system 106 can make it possible for a user to storecontent, as well as perform a variety of content management tasks, suchas retrieve, modify, browse, and/or share the content. Furthermore,content management system 106 can make it possible for a user to accessthe content from multiple client devices 102. For example, client device102, can upload content to content management system 106 via network104. The content can later be retrieved from content management system106 using the same client device 102, or some other client device 102_(j).

To facilitate the various content management services, a user can createan account with content management system 106. The account informationcan be maintained in user account database 150. User account database150 can store profile information for registered users. In some cases,the only personal information in the user profile can be a usernameand/or email address. However, content management system 106 can also beconfigured to accept additional user information.

User account database 150 can also include account managementinformation, such as account type, e.g. free or paid; usage information,e.g. file edit history; maximum storage space authorized; storage spaceused; content storage locations; security settings; personalconfiguration settings; content sharing data; etc. Account managementmodule 124 can be configured to update and/or obtain user accountdetails in user account database 150. The account management module 124can be configured to interact with any number of other modules incontent management system 106.

An account can be used to store content, such as digital data,documents, text files, audio files, video files, image files, etc., fromone or more client devices 102 authorized on the account. The contentcan also include folders of various types with different behaviors, orother mechanisms of grouping content items together. For example, anaccount can include a public folder that is accessible to any user. Thepublic folder can be assigned a web-accessible address. A link to theweb-accessible address can be used to access the contents of the publicfolder. In another example, an account can include a photos folder thatis intended for photos and that provides specific attributes and actionstailored for photos; an audio folder that provides the ability to playback audio files and perform other audio related actions; or otherspecial purpose folders. An account can also include shared folders orgroup folders that are linked with and available to multiple useraccounts. The permissions for multiple users may be different for ashared folder.

The content can be stored in content storage 160. Content storage 160can be a storage device, multiple storage devices, or a server.Alternatively, content storage 160 can be a cloud storage provider ornetwork storage accessible via one or more communications networks.Content management system 106 can hide the complexity and details fromclient devices 102 so that client devices 102 do not need to knowexactly where the content items are being stored by content managementsystem 106. In one variation, content management system 106 can storethe content items in the same folder hierarchy as they appear on clientdevice 102 _(i). However, content management system 106 can store thecontent items in its own order, arrangement, or hierarchy. Contentmanagement system 106 can store the content items in a networkaccessible storage (SAN) device, in a redundant array of inexpensivedisks (RAID), etc. Content storage 160 can store content items using oneor more partition types, such as FAT, FAT32, NTFS, EXT2, EXT3, EXT4,ReiserFS, BTRFS, and so forth.

Content storage 160 can also store metadata describing content items,content item types, and the relationship of content items to variousaccounts, folders, or groups. The metadata for a content item can bestored as part of the content item or can be stored separately. In onevariation, each content item stored in content storage 160 can beassigned a system-wide unique identifier.

Content storage 160 can decrease the amount of storage space required byidentifying duplicate files or duplicate segments of files. Instead ofstoring multiple copies, content storage 160 can store a single copy andthen use a pointer or other mechanism to link the duplicates to thesingle copy. Similarly, content storage 160 can store files moreefficiently, as well as provide the ability to undo operations, by usinga file version control that tracks changes to files, different versionsof files (including diverging version trees), and a change history. Thechange history can include a set of changes that, when applied to theoriginal file version, produce the changed file version.

Content management system 106 can be configured to support automaticsynchronization of content from one or more client devices 102. Thesynchronization can be platform agnostic. That is, the content can besynchronized across multiple client devices 102 of varying type,capabilities, operating systems, etc. For example, client device 102,can include client software, which synchronizes, via a synchronizationmodule 132 at content management system 106, content in client device102 _(i')s file system with the content in an associated user account.In some cases, the client software can synchronize any changes tocontent in a designated folder and its sub-folders, such as new,deleted, modified, copied, or moved files or folders. The clientsoftware can be a separate software application, can integrate with anexisting content management application in the operating system, or somecombination thereof. In one example of client software that integrateswith an existing content management application, a user can manipulatecontent directly in a local folder, while a background process monitorsthe local folder for changes and synchronizes those changes to contentmanagement system 106. Conversely, the background process can identifycontent that has been updated at content management system 106 andsynchronize those changes to the local folder. The client software canprovide notifications of synchronization operations, and can provideindications of content statuses directly within the content managementapplication. Sometimes client device 102 _(i) may not have a networkconnection available. In this scenario, the client software can monitorthe linked folder for file changes and queue those changes for latersynchronization to content management system 106 when a networkconnection is available. Similarly, a user can manually stop or pausesynchronization with content management system 106.

A user can also view or manipulate content via a web interface generatedand served by user interface module 122. For example, the user cannavigate in a web browser to a web address provided by contentmanagement system 106. Changes or updates to content in the contentstorage 160 made through the web interface, such as uploading a newversion of a file, can be propagated back to other client devices 102associated with the user's account. For example, multiple client devices102, each with their own client software, can be associated with asingle account and files in the account can be synchronized between eachof the multiple client devices 102.

Content management system 106 can include a communications interface 120for interfacing with various client devices 102, and can interact withother content and/or service providers 109 ₁, 109 ₂, . . . , 109 _(n)(collectively “109”) via an Application Programming Interface (API).Certain software applications can access content storage 160 via an APIon behalf of a user. For example, a software package, such as an app ona smartphone or tablet computing device, can programmatically make callsdirectly to content management system 106, when a user providescredentials, to read, write, create, delete, share, or otherwisemanipulate content. Similarly, the API can allow users to access all orpart of content storage 160 through a web site.

Content management system 106 can also include authenticator module 126,which can verify user credentials, security tokens, API calls, specificclient devices, and so forth, to ensure only authorized clients andusers can access files. Further, content management system 106 caninclude analytics module 134 that can track and report on aggregate fileoperations, user actions, network usage, total storage space used, aswell as other technology, usage, or business metrics. A privacy and/orsecurity policy can prevent unauthorized access to user data stored withcontent management system 106.

Content management system 106 can include sharing module 130 formanaging sharing content publicly or privately. Sharing content publiclycan include making the content item accessible from any computing devicein network communication with content management system 106. Sharingcontent privately can include linking a content item in content storage160 with two or more user accounts so that each user account has accessto the content item. The sharing can be performed in a platform agnosticmanner. That is, the content can be shared across multiple clientdevices 102 of varying type, capabilities, operating systems, etc. Thecontent can also be shared across varying types of user accounts.

In some embodiments, content management system 106 can be configured tomaintain a content directory identifying the location of each contentitem in content storage 160. The content directory can include a uniquecontent entry for each content item stored in the content storage.

A content entry can include a content path that can be used to identifythe location of the content item in content storage 160. For example,the content path can identify the exact storage address of the contentitem in memory. In some embodiments, the content path can identifymultiple locations in memory, each of which contains a portion of thecontent item.

Further, the content path can include the name of the content item and afolder hierarchy associated with the content item. For example, thecontent path can include a folder or path of folders in which thecontent item is placed as well as the name of the content item. Contentmanagement system 106 can use the content path to present the contentitems in the appropriate folder hierarchy.

In addition to a content path, a content entry can also include a useraccount identifier that identifies the user account that has access tothe content item. In some embodiments, multiple user account identifierscan be associated with a single content entry indicating that thecontent item has shared access by the multiple user accounts.

To share a content item privately, sharing module 130 can be configuredto add a user account identifier to the content entry associated withthe content item, thus granting the added user account access to thecontent item. Sharing module 130 can also be configured to remove useraccount identifiers from a content entry to restrict a user account'saccess to the content item.

To share a content item publicly, sharing module 130 can be configuredto generate a sharing link which can be used to access the content item.In some embodiments, a sharing link can be a custom network address,such as a uniform resource locator (URL), which allows the content itemto be accessed without any authentication. The generated sharing linkcan be used to identify the content item associated with the sharinglink. Upon generating the sharing link, sharing module 130 can create anentry in a sharing index. The entry can include the generated sharinglink and a content path of the content item that can be used to identifythe location of the content item on content management system 106. Uponreceiving a request via the sharing link, content management system 106,can search for the sharing link in the sharing index to identify thelocation of the content item. Content management system 106 can thusreturn the content item to a requesting client device 102.

In some embodiments, a sharing link can be created upon a userrequesting to share a content item. For example, client device 102 _(i)can be configured to send a sharing request to content management system106 upon receiving a sharing input requesting to share a content item.Upon receiving the sharing request from client device 102 _(i), contentmanagement system 106 can be configured to create a sharing link andsend the sharing link to client device 102 _(i) which can be madeavailable to the user to share the content item.

The sharing request sent to content management system 106 can includethe content path of the content item identified by the sharing input.Upon receiving the sharing request from client device 102 _(i), contentmanagement system 106 can be configured to generate a sharing link andcreate an entry in the sharing index including the generated sharinglink and the content path received from client device 102 _(i). Contentmanagement system 106 can send the created sharing link to client device102 ₁, which can be made available to the user to share the contentitem.

FIG. 2 shows content management system 106 creating a sharing link uponreceiving a sharing request from client device 102 _(i) . As shownclient device 102 _(i) includes content item ‘A’ that has content path‘foo’. To create a sharing link to content item ‘A’, client device 102_(i) can send sharing request 205 to content management system 106.Sharing request 205 can include the content path ‘foo’ for the contentitem ‘A’.

In some embodiments, client device 102 _(i) can send sharing request 205in response to receiving a sharing input indicating that a user ofclient device 102 _(i) would like to share a content item. The sharinginput can identify the content item that the user wishes to share withother users. For example, in some embodiments, client device 102 _(i)can present the user with a user interface element, such as button,enabling a user to share content item ‘A’. Selection of the userinterface element can result in the sharing input identifying contentitem ‘A’.

Upon receiving sharing request 205, content management system 106 cangenerate a sharing link ‘X’. Further, content management system 106 canadd an entry in sharing index 210 including the generated sharing link‘X’ and the content path ‘foo’ received from client device 102 _(i).Content management system 106 can send the generated sharing link ‘X’ toclient device 102 _(i) in message 215. Client device 102 _(i) canpresent the received sharing link ‘X’, which can be used to sharecontent item ‘A’.

Returning to the discussion of FIG. 1, in some embodiments, the sharinglink returned to client device 102 _(i) can be visually presented byclient device 102 _(i). For example, sharing module 130 can beconfigured to cause client device 102 _(i) to present the sharing linkin a window_(.) A user can then easily share the content item by copyingthe sharing link to an e-mail, a post to a social networking site, etc.

In some embodiments, the sharing link can be stored in a data buffer onclient device 102 _(i) where it can be accessible from multipleapplications executed on client device 102 _(i). For example, thesharing link can be stored in a data buffer, such as a clipboard, and auser can use a paste function to include the sharing link in e-mails,social networking posts, etc.

In some embodiments, client device 102 _(i) can be configured to allotan amount of time in which the sharing link must be created. Forexample, creation of a sharing link may be delayed due to lack ofnetwork connection, slow network connection, delay by content managementsystem 106, etc. To ensure that a user is not left waiting for therequested sharing link for an extended period of time, client device 102_(i) can be configured to set a timer upon sending the sharing requestto content management system 106. If the sharing link is not returned toclient device 102 _(i) within the allotted amount of time after sendingthe sharing request to content management system 106, client device 102_(i) can be configured to present the user with an error message thatthe sharing link could not be created.

If the sharing link is returned to client device 102 _(i) after theallotted amount of time has expired, client device 102 _(i) can storethe received sharing link in a local memory on client device 102 _(i)for later user. For example, if the user later tries to publicly sharethe same content item, client device 102 _(i) can retrieve the sharinglink from the local memory and make the sharing link available to theuser. Thus client device 102 _(i) can make the sharing link available tothe user without having to send a sharing request to content managementsystem 106. In this type of embodiment, client device 102 _(i) can beconfigured to check the local memory on client device 102 _(i) for asharing link to the content item prior to sending a sharing request tocontent management system 106.

FIG. 3 shows an exemplary method embodiment of a client device providinga sharing link to a content item. Although specific steps are show inFIG. 3, in other embodiments a method can have more or less steps. Asshown, the method begins at block 305 where a sharing input is receivedfrom a user. A sharing input can be an input received from the userrequesting to publicly share a content item. For example, the sharinginput can be received as a result of the user selecting a user interfaceelement, such as a button, presented with the content item that promptsa user to share the content item.

Upon receiving the sharing input, the method continues to block 310where the client device determines if a sharing link for the contentitem is stored in a local memory on the client device. For example, auser may have previously requested to publicly share the content itemand a resulting sharing link can be stored in a local memory of theclient device and associated with the content item. The client devicecan search the local memory to determine if a sharing link to thecontent item is stored in the local memory.

If at block 310 the client device determines that a sharing link to thecontent item is stored on the client device, the method continues toblock 330 where a sharing link is stored in a data buffer, such as aclipboard, on the client device. The method then continues to block 335where a notification that the sharing link has been created is presentedto the user. The method then continues to block 350 where the receivedsharing link is stored in local memory and associated with the contentitem. The method then ends.

If at block 310, the client device determines that a sharing link to thecontent item is not present in local memory, the method continues toblock 315 where the client device sends a sharing request to the contentmanagement system. A sharing request can include the content path of thecontent item.

At block 320 the client device can initiate a timer for receiving aresponse from the content management system. For example, the clientdevice can allot a predetermined amount of time after sending thesharing request to receive a response including the sharing link fromthe content management system.

At block 325 the method determines if a sharing link was received withinthe predetermined amount of time allotted to receive a response from thecontent management system. If at block 325 it is determined that asharing link was received within the predetermined amount of time, themethod continues to block 330 where the client device stores thereceived sharing link in the data buffer. The method then continues toblock 335 where the client device provides a notification to the userthat the sharing link was stored in the data buffer. The method thencontinues to block 350 where the received sharing link is stored inlocal memory and associated with the content item. The method then ends.

Alternatively, if at block 325 a sharing link is not received within theallotted time, the method continues to block 340 where an error messageis presented to the user. For example, the client device can present amessage indicating that a sharing link could not be created and that theuser can attempt to create the sharing link at a later time.

Although the sharing link was not received from the content managementsystem within the allotted time, the content management system can stillreturn the sharing link to the client device. For example, problems suchas a network connection issue between the client device and the contentmanagement system can cause a delay that results in the sharing linkbeing sent to the client device after the allotted time expires. Thus atblock 345 the client device determines if a sharing link is received bythe client device. If at block 345 a sharing link is not received fromthe content management system, the method ends.

If at block 345 a sharing link is received from the content managementsystem the method continues to block 350 where the received sharing linkis stored in local memory on the client device and associated with thecontent item. Thus if a user selects to share the content item in thefuture, the client device can provide the sharing link stored in localmemory and a sharing request does not need to be sent to the contentmanagement system. The method then end.

FIG. 4 shows an exemplary method embodiment of a content managementsystem creating a sharing link upon receiving a sharing request from aclient device. Although specific steps are shown in FIG. 4, in otherembodiments a method can have more or less steps. As shown, the methodbegins at block 405 where a sharing request is received by the contentmanagement system from a client device. A sharing request can be arequest to create a sharing link for an identified content item. Thesharing request can include the content path or other content itemidentifier for the content item that can be used to locate the contentitem.

Upon receiving the sharing request, the method continues to block 410where the content management system generates the sharing link. Thecontent management system can generate the sharing link in any of avariety of ways known in the art, however it is preferable that eachsharing link generated be unique.

Upon creating the sharing link, the method continues to block 415 wherethe content management system creates a new entry in a sharing index.The sharing index can be a list of sharing links created by the contentmanagement system. The sharing index can further list the content pathcorresponding to each sharing link listed in the sharing index. Thecontent management system can add a new entry to the sharing index thatincludes the sharing link created by the content management system aswell as the content path received from the client device.

The method then continues to block 420 where the sharing link created bythe content management system is sent to the client device, where it canthen be provided to a user. The method then ends.

Returning to the discussion of FIG. 1, in some embodiments, a sharinglink can be pre-cached in a local memory on client device 102, which canbe provided to the user upon receiving a sharing input. Pre-caching asharing link on client device 102, provides several advantages overrequesting a sharing link from content management system 106 uponreceiving a sharing input. For example, by pre-caching sharing links onclient device 102 _(i), client device 102 _(i) can make a sharing linkavailable to the user almost immediately without having to send arequest to content management system 106. Thus, client device 102 _(i)can make the sharing link available to the user almost immediately uponreceiving a sharing input. Further, client device 102 _(i) can make asharing link available to the user even while client device 102 _(i) isoffline, i.e. client device 102 _(i) is not in network connection withcontent management system 106.

To pre-cache sharing links on client device 102 _(i), sharing module 130can create a sharing link and send the sharing link to client device 102_(i). Client device 102 _(i) can store the sharing links in a localmemory on client device 102 _(i). Further, sharing module 130 can createa new entry in the sharing index that only includes the created sharinglink sent to client device 102 _(i). Thus the new entry does not includea content path.

Upon receiving a sharing input, client device 102 _(i) can make thesharing link stored in local memory available to the user. Client device102 _(i) can then send a sharing request to content management system106 that includes the content path of the content item and the sharinglink provided to the user. Upon receiving the sharing request, sharingmodule 130 can use the content path and sharing link to update thesharing index entry associated with the sharing link to include thecontent path received from client device 102,.

FIGS. 5A-5C show an exemplary embodiment of making a pre-cached sharinglink available to a user. As shown, in FIG. 5A, client device 102 _(i)includes content item ‘A’ with file path ‘foo’. Client device 102,includes local storage 505 that includes no sharing links.

Further, content management system 106 has created three sharing links,‘X’, ‘Y’ and ‘Z’, and has also created an entry for each of the threesharing links in sharing index 510. As shown, each entry in sharingindex 510 includes a value for a sharing link but no value for a contentpath.

FIG. 5B shows content management system 106 sending the three sharinglinks ‘X’, ‘Y’ and ‘Z’ to client device 102, via message 515. As shown,the sent sharing links are stored on client device 102 _(i) in localstorage 505. Content management system 106 can send message 515 toclient device at any time. For example, in some embodiments, contentmanagement system 106 can send message 515 to client device 102 _(i)upon client device 102 _(i) being authorized on a storage accountmanaged by content management system 106.

FIG. 5C shows a pre-cached sharing link being made available upon clientdevice 102 _(i) receiving a sharing input form the user. Client device102 _(i) can receive a sharing input from a user to share content item‘A’. Upon receiving the sharing input, client device 102 _(i) can searchlocal memory 505 to identify any available sharing links. As shown, allthree sharing links are available and client device 102 _(i) can providesharing link ‘X’ to the user.

Upon providing sharing link ‘X’ to the user in response to receiving thesharing input, client device 102, can send sharing request 520 tocontent management system 106. Sharing request 520 can include thecontent path ‘foo’ of content item ‘A’ as well as the sharing link ‘X’provided to the user.

Content management system 106 can use the sharing link ‘X’ and contentpath ‘foo’ to update sharing index 510. As shown, content managementsystem 106 has updated the entry associated with sharing link ‘X’ toinclude the content path ‘foo’ received from client device 102 _(i).

Further, in some embodiments, content management system 106 can send anew sharing link to replace sharing link ‘X’ stored in local memory 505on client device 102 _(i) in response to receiving sharing request 520.Alternatively, in some embodiments, client device 102 _(i) can beconfigured to request new sharing links from content management system106. For example, client device 102 _(i) can be configured to requestnew sharing links from content management system upon a determinationthat the number of sharing links stored in local memory 505 is low; forexample if only one unallocated sharing link is available.

FIG. 6 shows an exemplary method embodiment of a client device providinga user with a sharing link stored in a local memory. Although specificsteps are show in FIG. 6, in other embodiments the method can have moreor less steps. As shown, the method begins at block 605 where the clientdevice receives a sharing input from a user that identifies a contentitem to be shared. Upon receiving the sharing input, the methodcontinues to block 610 where the client device determines if anavailable sharing link is stored in the local memory on the clientdevice. An available sharing link can be a sharing link that is notassociated with a content item, i.e. the sharing link has not beenprovided to a user in response to a sharing input.

If at block 610 the client device determines that there are no availablesharing links in the local memory, the method continues to block 635where an error message is presented to the user. For example, the errormessage can alert the user that a sharing link cannot be provided atthat time and the user should try again later. The method then ends.

If at block 610 the client device determines that there is an availablesharing link stored in the local storage, the method continues to block615 where the client device stores the available sharing link in a databuffer. The method then continues to block 620 where the client devicenotifies the user that the sharing link has been stored in the databuffer.

At block 625, the client device sends a sharing request to the contentmanagement system. The sharing request can include the sharing link andthe content path associated with the content item. The method thencontinues to block 630 where a new sharing link can be received from thecontent management system. The new sharing link can be stored in thelocal storage and provided to a user in response to receiving futuresharing inputs.

FIG. 7 shows an exemplary method embodiment of a content managementsystem providing a user with a sharing link stored in a local storage onthe client device. Although specific steps are show in FIG. 5, in otherembodiments the method can have more or less steps. As shown, the methodbegins at block 705 where the content management system generates asharing link. The sharing link can be generated using any of a varietyof known methods in the art, however in a preferred embodiment, eachgenerated sharing link can be unique.

Upon generating the sharing link, the content management system cancreate a new entry in a sharing index. The sharing index can listsharing links generated by the content management system along with thecontent path of the content item to which the the respective sharinglink provides access. The new content entry created by the contentmanagement system can include the generated sharing link and have novalue for the content path.

Upon creating the entry in the sharing index, the content managementsystem can send the sharing link to the client device, where it can bestored in a local memory on the client device.

At block 720, the content management system can receive a sharingrequest from the client device. The sharing request can include thesharing link along with a content path. The method then continues toblock 725 where the content management system updates the entry in thesharing index associated with the sharing link to include the contentpath received from the client device. The method then ends, or,alternatively, is repeated.

Returning to the discussion of FIG. 1, one advantage of the disclosedtechnology is that a sharing link can be provided to a user without thecontent item itself being stored on content management system 106. Forexample, a user can select to share a content item on client device 102_(i) prior to the content item being uploaded to content managementsystem 106.

Although the sharing link can be made available to the user, the sharinglink will not provide access to the content until the content item isuploaded to content management system 106. Sharing module 130 cantherefore be configured to determine if a content item requested via asharing link is stored on content management system 106 and return anerror message to a user if the content item is not stored on contentmanagement system 106.

In some embodiments, client device 102 _(i) can be configured to createa share link to a content item as it is created on client device 102_(i). For example, a user can create a content item on client device 102_(i) using functionality provided by client device 102 _(i), such astaking a picture with a camera of client device 102 _(i) or by taking ascreenshot of the screen presented on client device 102 _(i).

Client device 102 _(i) can be configured to regard creation of a contentitem on client device 102 _(i) as a sharing input to share the newlycreated content item. Thus, upon a user creating a content item by, forexample, taking a screenshot of client device 102 _(i), client devicecan be configured to make a sharing link to the newly created clientdevice available to the user. For example, in some embodiments, clientdevice 102 _(i) can send a sharing request to content management system106 for a sharing link. Alternatively, in some embodiments, clientdevice 102 _(i) can make a pre-cached sharing link stored in localmemory on client device 102 _(i) available to the user of client device102 _(i).

Thus, upon a user creating a new content item, client device 102 _(i)can make a sharing link to access the content item available by, forexample, storing the sharing link in a data buffer on the client device.The user can then share the content item by pasting the sharing linkstored in the data buffer into an e-mail, social networking post, etc.

While content management system 106 is presented with specificcomponents, it should be understood by one skilled in the art, that thearchitectural configuration of system 106 is simply one possibleconfiguration and that other configurations with more or less componentsare also possible.

FIG. 8 shows an exemplary method embodiment of returning a content itemrequested by a sharing link. Although specific steps are show in FIG. 5,in other embodiments a method can have more or less steps. As shown, themethod begins at block 805 where a content item request is received atthe content management system from a requesting client device. Thecontent item request can be a request to access a publicly sharedcontent item.

The content item request can be sent using a sharing link created toshare the content item. For example, in some embodiments, the contentitem request can be sent upon a user selecting the sharing link.Alternatively, in some embodiments, the content item request can be sentupon a user entering the sharing link into a URL field in a web browserapplication.

Upon receiving the content item request, the method continues to block810 where the content management system identifies the entry in thesharing index associated with the requested content item. For example,the content item request can include the sharing link and the contentmanagement system can use the sharing link to search the sharing indexfor the corresponding entry.

At block 815 the content management system determines if the identifiedsharing index entry includes a data path. For example, in embodiments inwhich the sharing link is provided to a user from a local memory on aclient device, the client device may not have yet sent the content pathof the content item to the content management system.

If at block 815 there is no content path included in the sharing indexentry, the method continues to block 835 where an error message isreturned to the requesting client device. The error message can indicatethat the requested content item is not yet available.

If at block 815 the sharing index entry does include a content path, themethod continues to block 820 where the content management systemlocates the content item using the content path. At block 825 thecontent management system determines if the content item is stored onthe content management system.

If at block 825 it is determined that the content item is not stored onthe content management system the method continues to block 835 where anerror message is sent to the requesting user device. The error messagecan indicate that the content item is not yet stored on the contentmanagement system. In some embodiments, the error message can indicatean upload status of the content item. For example, the error message canindicate whether the content item has begun uploading, and if so, whatpercentage has completed uploading to the content management system.Further, the error message can include an estimated completion time ofan upload.

If at block 825 the content management system determines that thecontent item is stored on the content management system, the methodcontinues to block 830 where the content management system can returnthe content item to the requesting client device. The method then ends.

FIGS. 9A and 9B show exemplary possible system embodiments. The moreappropriate embodiment will be apparent to those of ordinary skill inthe art when practicing the present technology. Persons of ordinaryskill in the art will also readily appreciate that other systemembodiments are possible.

FIG. 9A illustrates a conventional system bus computing systemarchitecture 900 wherein the components of the system are in electricalcommunication with each other using a bus 905. Exemplary system 900includes a processing unit (CPU or processor) 910 and a system bus 905that couples various system components including the system memory 915,such as read only memory (ROM) 920 and random access memory (RAM) 925,to the processor 910. The system 900 can include a cache of high-speedmemory connected directly with, in close proximity to, or integrated aspart of the processor 910. The system 900 can copy data from the memory915 and/or the storage device 930 to the cache 912 for quick access bythe processor 910. In this way, the cache can provide a performanceboost that avoids processor 910 delays while waiting for data. These andother modules can control or be configured to control the processor 910to perform various actions. Other system memory 915 may be available foruse as well. The memory 915 can include multiple different types ofmemory with different performance characteristics. The processor 910 caninclude any general purpose processor and a hardware module or softwaremodule, such as module 1 932, module 2 934, and module 3 936 stored instorage device 930, configured to control the processor 910 as well as aspecial-purpose processor where software instructions are incorporatedinto the actual processor design. The processor 910 may essentially be acompletely self-contained computing system, containing multiple cores orprocessors, a bus, memory controller, cache, etc. A multi-core processormay be symmetric or asymmetric.

To enable user interaction with the computing device 900, an inputdevice 945 can represent any number of input mechanisms, such as amicrophone for speech, a touch-sensitive screen for gesture or graphicalinput, keyboard, mouse, motion input, speech and so forth. An outputdevice 935 can also be one or more of a number of output mechanismsknown to those of skill in the art. In some instances, multimodalsystems can enable a user to provide multiple types of input tocommunicate with the computing device 900. The communications interface940 can generally govern and manage the user input and system output.There is no restriction on operating on any particular hardwarearrangement and therefore the basic features here may easily besubstituted for improved hardware or firmware arrangements as they aredeveloped.

Storage device 930 is a non-volatile memory and can be a hard disk orother types of computer readable media which can store data that areaccessible by a computer, such as magnetic cassettes, flash memorycards, solid state memory devices, digital versatile disks, cartridges,random access memories (RAMs) 925, read only memory (ROM) 920, andhybrids thereof.

The storage device 930 can include software modules 932, 934, 936 forcontrolling the processor 910. Other hardware or software modules arecontemplated. The storage device 930 can be connected to the system bus905. In one aspect, a hardware module that performs a particularfunction can include the software component stored in acomputer-readable medium in connection with the necessary hardwarecomponents, such as the processor 910, bus 905, display 935, and soforth, to carry out the function.

FIG. 9B illustrates a computer system 950 having a chipset architecturethat can be used in executing the described method and generating anddisplaying a graphical user interface (GUI). Computer system 950 is anexample of computer hardware, software, and firmware that can be used toimplement the disclosed technology. System 950 can include a processor955, representative of any number of physically and/or logicallydistinct resources capable of executing software, firmware, and hardwareconfigured to perform identified computations. Processor 955 cancommunicate with a chipset 960 that can control input to and output fromprocessor 955. In this example, chipset 960 outputs information tooutput 965, such as a display, and can read and write information tostorage device 970, which can include magnetic media, and solid statemedia, for example. Chipset 960 can also read data from and write datato RAM 975. A bridge 980 for interfacing with a variety of userinterface components 985 can be provided for interfacing with chipset960. Such user interface components 985 can include a keyboard, amicrophone, touch detection and processing circuitry, a pointing device,such as a mouse, and so on. In general, inputs to system 950 can comefrom any of a variety of sources, machine generated and/or humangenerated.

Chipset 960 can also interface with one or more communication interfaces990 that can have different physical interfaces. Such communicationinterfaces can include interfaces for wired and wireless local areanetworks, for broadband wireless networks, as well as personal areanetworks. Some applications of the methods for generating, displaying,and using the GUI disclosed herein can include receiving ordereddatasets over the physical interface or be generated by the machineitself by processor 955 analyzing data stored in storage 970 or 975.Further, the machine can receive inputs from a user via user interfacecomponents 985 and execute appropriate functions, such as browsingfunctions by interpreting these inputs using processor 955.

It can be appreciated that exemplary systems 900 and 950 can have morethan one processor 910 or be part of a group or cluster of computingdevices networked together to provide greater processing capability.

For clarity of explanation, in some instances the present technology maybe presented as including individual functional blocks includingfunctional blocks comprising devices, device components, steps orroutines in a method embodied in software, or combinations of hardwareand software.

In some embodiments the computer-readable storage devices, mediums, andmemories can include a cable or wireless signal containing a bit streamand the like. However, when mentioned, non-transitory computer-readablestorage media expressly exclude media such as energy, carrier signals,electromagnetic waves, and signals per se.

Methods according to the above-described examples can be implementedusing computer-executable instructions that are stored or otherwiseavailable from computer readable media. Such instructions can comprise,for example, instructions and data which cause or otherwise configure ageneral purpose computer, special purpose computer, or special purposeprocessing device to perform a certain function or group of functions.Portions of computer resources used can be accessible over a network.The computer executable instructions may be, for example, binaries,intermediate format instructions such as assembly language, firmware, orsource code. Examples of computer-readable media that may be used tostore instructions, information used, and/or information created duringmethods according to described examples include magnetic or opticaldisks, flash memory, USB devices provided with non-volatile memory,networked storage devices, and so on.

Devices implementing methods according to these disclosures can comprisehardware, firmware and/or software, and can take any of a variety ofform factors. Typical examples of such form factors include laptops,smart phones, small form factor personal computers, personal digitalassistants, and so on. Functionality described herein also can beembodied in peripherals or add-in cards. Such functionality can also beimplemented on a circuit board among different chips or differentprocesses executing in a single device, by way of further example.

The instructions, media for conveying such instructions, computingresources for executing them, and other structures for supporting suchcomputing resources are means for providing the functions described inthese disclosures.

Although a variety of examples and other information was used to explainaspects within the scope of the appended claims, no limitation of theclaims should be implied based on particular features or arrangements insuch examples, as one of ordinary skill would be able to use theseexamples to derive a wide variety of implementations. Further andalthough some subject matter may have been described in languagespecific to examples of structural features and/or method steps, it isto be understood that the subject matter defined in the appended claimsis not necessarily limited to these described features or acts. Forexample, such functionality can be distributed differently or performedin components other than those identified herein. Rather, the describedfeatures and steps are disclosed as examples of components of systemsand methods within the scope of the appended claims.

1. A method comprising: generating one or more sharing links for sharingone or more content items; creating respective entries in a sharingindex at a content management system, the respective entriescorresponding to the one or more sharing links; receiving, by thecontent management system from a first client device, a first contentsharing request identifying a first sharing link having a respectiveentry in the sharing index, the first sharing link being associated witha respective content item corresponding to the first content sharingrequest; determining that the first content sharing request comprises anindication of a content path of the respective content item associatedwith the first content sharing request; and in response to determiningthat the first content sharing request comprises the indication of thecontent path, adding, by the content management system, the content pathof the respective content item to the respective entry in the sharingindex.
 2. The method of claim 1, wherein a subset of the respectiveentries comprises content paths of respective content items associatedwith respective ones of the one or more sharing links, the methodfurther comprising: receiving the respective content item from the firstclient device; and after adding the content path to the respectiveentry, storing the respective content item at a location identified bythe content path.
 3. The method of claim 1, further comprising:receiving, from a second client device, the first content sharingrequest identifying the first sharing link, wherein the first contentsharing request is sent by the second client device in responseactivating the first sharing link; searching the sharing index for thefirst sharing link; identifying the respective entry in the sharingindex associated with the first sharing link; retrieving, by the contentmanagement system, the respective content item from a locationidentified by the content path in the respective entry; and sending, tothe second client device, the respective content item from the location.4. The method of claim 1, further comprising: generating a secondsharing link which, when activated, sends a second content item requestto the content management system; creating a second entry in the sharingindex identifying the second sharing link; and sending the secondsharing link to the first client device.
 5. The method of claim 1,further comprising: receiving, from a second client device, a contentitem request identifying a second sharing link, wherein the content itemrequest is triggered by an activation of the second sharing link by thesecond client device; searching the sharing index for the second sharinglink; identifying a second entry that identifies the second sharinglink; determining that the second entry is missing a second content pathidentifying a storage location of a second content item associated withthe second sharing link; and notifying the second client device that thesecond content item is not available.
 6. The method of claim 5, furthercomprising: receiving from the first client device, the second contentitem and an indication of the second storage path; storing the secondcontent item at the storage location identified by the second contentpath; updating the second entry to include the second content path forthe second content item; receiving, from the second client device, thesecond content item request identifying the second sharing link;searching the sharing index for the second sharing link associated withthe second content item request; identifying the second entryidentifying the second sharing link; and returning, to the second clientdevice, the second content item from the storage location associatedwith the second content path in the second entry.
 7. A contentmanagement system comprising: one or more processors; and at least onememory storing instructions that, when executed by the one or moreprocessors, cause the content management system to: generate one or moresharing links for sharing one or more content items; prior to obtaininga respective content path for at least one of the one or more sharinglinks, create, for the one or more sharing links, respective entries ina sharing index at a content management system, each of the respectiveentries identifying a respective sharing link; receive, from a firstclient device, a first content sharing request identifying a firstsharing link in a respective entry from the sharing index, the firstsharing link corresponding to a respective content item associated withthe first content sharing request; determine that the first contentsharing request comprises an indication of a content path of therespective content item associated with the first content sharingrequest; and in response to determining that the first content sharingrequest comprises the indication of the content path, update therespective entry in the sharing index to include the content path. 8.The content management system of claim 7, wherein the one or moresharing links, when activated by a respective client device, cause therespective client device to send a respective sharing request to thecontent management system, wherein the first content sharing request issent by the first client device upon the first client device activatingthe first sharing link.
 9. The content management system of claim 7,wherein the respective entry is generated by the content managementsystem prior to receiving the respective content item or the contentpath of the respective content item, the at least one memory storingadditional instructions that, when executed by the one or moreprocessors, cause the content management system to: after updating therespective entry to include the content path of the respective contentitem: receive the respective content item; in response to receiving therespective content item, identify the content path for the respectivecontent item in the respective entry; and store the respective contentitem at a location identified by the content path.
 10. The contentmanagement system of claim 7, the at least one memory storing additionalinstructions that, when executed by the one or more processors, causethe content management system to: receive, from a second client device,a second request identifying the first sharing link; search the sharingindex for the first sharing link based on the second request; identifythe respective entry identifying the first sharing link; retrieve therespective content item from the first content path in the respectiveentry; and send the respective content item to the second client device.11. The content management system of claim 7, the at least one memorystoring additional instructions that, when executed by the one or moreprocessors, cause the content management system to: generate a secondsharing link configured to send a second content item request to thecontent management system; create a second entry in the sharing index,the second entry identifying the second sharing link; and send thesecond sharing link to one or more client devices.
 12. The contentmanagement system of claim 7, the at least one memory storing additionalinstructions that, when executed by the one or more processors, causethe content management system to: receive, from a second client device,a content item request identifying a second sharing link, wherein thecontent item request is triggered by an activation of the second sharinglink at the second client device, the second sharing link beingassociated with a second content item; search the sharing index based onthe second sharing link identified by the second content item request;identify a second entry that identifies the second sharing link;determine that the second entry is missing a respective content pathidentifying a storage location of the second content item; and send, tothe second client device, a notification indicating that the respectivecontent path of the second content item is not available.
 13. Thecontent management system of claim 12, the at least one memory storingadditional instructions that, when executed by the one or moreprocessors, cause the content management system to: receive, from thefirst client device, the second content item and a second indication ofthe second content path; store the second content item at the storagelocation identified by the second content path; receive, from the secondclient device, the second content item request identifying the secondsharing link; search the sharing index based on the second sharing linkidentified by the second content item request; identify the second entryidentifying the second sharing link; and return, to the second clientdevice, the second content item located at the storage locationidentified by the second content path in the second entry.
 14. Anon-transitory computer-readable storage medium comprising: instructionsstored thereon which, when executed by one or more processors, cause theone or more processors to: generate one or more sharing links forsharing one or more content items; create respective entries for the oneor more sharing links in a sharing index at a content management system,each of the respective entries corresponding to a respective one of theone or more sharing links; receive, from a first client device, a firstcontent sharing request identifying a first sharing link from thesharing index, the first sharing link corresponding to a respectivecontent item associated with the first content sharing request;determine that the first content sharing request comprises an indicationof a content path of the respective content item associated with thefirst content sharing request; and in response to determining that thefirst content sharing request comprises the indication of the contentpath, adding the content path of the respective content item to arespective entry in the sharing index corresponding to the first sharinglink.
 15. The non-transitory computer-readable storage medium of claim14, wherein the first sharing link, when activated, triggers anactivating device to send the first content sharing request to thecontent management system, wherein the first content sharing request issent by the first client device upon activation of the first sharinglink.
 16. The non-transitory computer-readable storage medium of claim14, wherein the respective entry is pre-generated prior to obtaining therespective content item or the content path of the respective contentitem, the non-transitory computer-readable storage medium storingadditional instructions which, when executed by the one or moreprocessors, cause the one or more processors to: in response toreceiving the respective content item from the first client device:determine whether the respective entry has been updated to include thecontent path; based on a determination that the respective entry hasbeen updated to include the content path, identify the content path fromthe respective entry and store the respective content item at thecontent path.
 17. The non-transitory computer-readable storage medium ofclaim 14, storing additional instructions which, when executed by theone or more processors, cause the one or more processors to: receive,from a requesting client device, a second content sharing requestidentifying the first sharing link; search the sharing index based onthe first sharing link; identify the respective entry identifying thefirst sharing link; retrieve the respective content item from thecontent path in the respective entry; and return, to the requestingclient device, the respective content item from the content path in therespective entry.
 18. The non-transitory computer-readable medium ofclaim 14, storing additional instructions which, when executed by theone or more processors, cause the one or more processors to: generate asecond sharing link which, when activated, causes an activating deviceto send a second request to the content management system; create asecond entry in the sharing index, the second entry identifying thesecond sharing link; and send the second sharing link to one or moreclient devices.
 19. The non-transitory computer-readable storage mediumof claim 14, storing additional instructions which, when executed by theone or more processors, cause the one or more processors to: receive,from a second client device, a content item request identifying a secondsharing link associated with a second content item; search the sharingindex based on the second sharing link identified by the content itemrequest; identify a second entry that identifies the second sharinglink; determine that the second entry is missing a second content pathidentifying a second location of the second content item associated withthe second sharing link; and notify the second client device that thesecond content item is not available.
 20. The non-transitorycomputer-readable storage medium of claim 14, wherein generating one ormore sharing links for sharing one or more content items comprises:prior to receiving the first content sharing request: pre-generating thefirst sharing link for the first client device to yield a pre-generatedfirst sharing link; and sending the pre-generated first sharing link tothe first client device for storage at the first client device; andwherein the first content sharing request received identifies thepre-generated first sharing link.